package newcoder_exp.justPractise;

import java.util.Arrays;

import org.junit.Test;

public class Nc22 {
    


    /*    
        给出一个整数数组 和有序的整数数组 ，请将数组 合并到数组 中，变成一个有序的升序数组
        注意：
        1.可以假设 数组有足够的空间存放 数组的元素， 和 中初始的元素数目分别为 和 ，的数组空间大小为 + 
        2.不要返回合并的数组，返回是空的，将数组 的数据合并到里面就好了
        3.数组在[0,m-1]的范围也是有序的

        例1:
        A: [1,2,3,0,0,0]，m=3
        B: [2,5,6]，n=3
        合并过后A为:
        A: [1,2,2,3,5,6]    
    */
    public class Solution {
        public void merge1(int A[], int m, int B[], int n) {
            if (A == null || A.length == 0) {
                if (B != null) {
                    A = Arrays.copyOf(B, B.length);
                    return;
                } else {
                    A = new int[0];
                    return;
                }
            }
            if (m > A.length || n > B.length) return;
            if (m + n > A.length) return;    

            int len = A.length, hi = len - 1;
            int ida = m - 1, idb = n - 1;
            while (ida >= 0 && idb >= 0) {
                if (A[ida] > B[idb]) {
                    A[hi] = A[ida];
                    ida--;
                    hi--;
                } else {
                    A[hi] = B[idb];
                    idb--;
                    hi--;
                }
            }

        }

        public void merge(int[] nums1, int m, int[] nums2, int n) {
            int i = m - 1, j = n - 1, index = m + n - 1;
            while (i >= 0 && j >= 0)
                nums1[index--] = nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
            while (j >= 0)
                nums1[index--] = nums2[j--];
        }
    }

    @Test
    public void test() {
        int[] A = null;//{1,2,3,0,0,0};
        int[] B = {1};//{2,5,6};
        A = new int[]{};
        // A = null;
        B = new int[]{1};
        Solution s = new Solution();
        int m =3, n = 3;
        s.merge(A, m, B, n);
        System.out.println(Arrays.toString(A));
    }
}
